﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Prisa.Entities;
using Prisa.BussinesLogic;
using Microsoft.Practices.Unity;

namespace Prisa.UI
{
    public partial class frmProducto : Form
    {
        [Dependency]
        public IProductoBL productoBL { get; set; }

        [Dependency]
        public IImpuestoBL impuestoBL { get; set; }

        public frmProducto()
        {
            InitializeComponent();
            this.BuildUp();
        }

        private void frmProducto_Load(object sender, EventArgs e)
        {
            //pRODUCTOBindingSource.DataSource = productoBL.GetAllFromProducto();            
            lblMensaje.Visible = false;
        }

        private void BtnBuscar_Click(object sender, EventArgs e)
        {
            if (rbtnGeneral.Checked == true)
            {
                BuscarPorDescripcion();
            }
            
            if (rbtnStock.Checked == true)
            {
                BuscarPorStock();
            }
        }

        private void BuscarPorDescripcion()
        {
            if (TxtDescripcion.Text.Length > 0)
            {
                //pRODUCTOBindingSource.DataSource = productoBL.GetFromProductoByDescripcion(TxtDescripcion.Text);
                List<PRODUCTO> existenProductos;
                existenProductos = productoBL.GetFromProductoByDescripcion(TxtDescripcion.Text);

                if (existenProductos.Count <= 0)
                {
                    lblMensaje.Visible = true;
                }
                else
                {
                    lblMensaje.Visible = false;
                    pRODUCTOBindingSource.DataSource = productoBL.GetFromProductoByDescripcion(TxtDescripcion.Text);
                }
            }
        }
        private void BuscarPorStock()
        {
            if (TxtDescripcion.Text.Length > 0)
            {
                var _minimo = Convert.ToInt32(impuestoBL.GetFromImpuestoById(5).Porcentaje);

                List<PRODUCTO> existenProductos;
                existenProductos = productoBL.GetAllFromProductosByDescripcionAndStockBajo(TxtDescripcion.Text, _minimo);

                if (existenProductos.Count <= 0)
                {
                    lblMensaje.Visible = true;
                }
                else
                {
                    lblMensaje.Visible = false;
                    pRODUCTOBindingSource.DataSource = productoBL.GetAllFromProductosByDescripcionAndStockBajo(TxtDescripcion.Text, _minimo);
                }
            }

        }


        private void TxtDescripcion_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (rbtnGeneral.Checked == true)
                {
                    BuscarPorDescripcion();
                }

                if (rbtnStock.Checked == true)
                {
                    BuscarPorStock();
                }
            }           
        }

        private void BtnAdd_Click(object sender, EventArgs e)
        {
            frmMttoProducto frm = new frmMttoProducto();
            frm.Nuevo();
            frm.ShowDialog();
            //pRODUCTOBindingSource.DataSource = productoBL.GetAllFromProducto();   ////ver el lugar correcto  para llamar al get
        }

        private void BtnUpdate_Click(object sender, EventArgs e)
        {
            PRODUCTO currentProducto = pRODUCTOBindingSource.Current as PRODUCTO;

            if (currentProducto != null)
            {
                frmMttoProducto frm = new frmMttoProducto();

                frm.IdProd = currentProducto.Id;
                frm.Editar(currentProducto.Id);
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un Producto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            
            //pRODUCTOBindingSource.DataSource = productoBL.GetAllFromProducto();
        }

        private void BtnRemove_Click(object sender, EventArgs e)
        {
            PRODUCTO currentProducto = pRODUCTOBindingSource.Current as PRODUCTO;
            var msg = "ERROR"; 
            try
            {
                if (currentProducto != null)
                {
                    var rpt = MessageBox.Show(this,
                    string.Format("¿Desea eliminar el Producto : {0}?", currentProducto.Descripcion),
                        "Mensaje",
                        MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (rpt == DialogResult.Yes)
                    {
                        productoBL.RemoveProducto(currentProducto.Id);
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar un Producto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                //pRODUCTOBindingSource.DataSource = productoBL.GetAllFromProducto();
            }
            catch (Exception ex)
            {
                msg = ex.Message;
                MessageBox.Show(msg + currentProducto.Descripcion+ "\n ya que tiene Créditos ó Ventas asociados", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void rbtnStock_Click(object sender, EventArgs e)
        {
            BuscarPorStock();
        }

        private void rbtnGeneral_Click(object sender, EventArgs e)
        {
            BuscarPorDescripcion();
        }

        private void TxtDescripcion_KeyPress(object sender, KeyPressEventArgs e)
        {
            var guion = Convert.ToString("-");
            var coma = Convert.ToString(",");
            var punto = Convert.ToString(".");
            var slash = Convert.ToString("/");
            var amber = Convert.ToString("&");

            string cadena = guion + coma + punto + slash + amber + (char)8;
            if (!cadena.Contains(e.KeyChar) && !(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar))
                && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != (char)Keys.Enter) && (e.KeyChar != (char)Keys.Clear)
                && !(char.IsSeparator(e.KeyChar)))
            {
                e.Handled = true;
                return;
            }
        }

        private void pRODUCTODataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            try
            {
                for (int count = 0; count < pRODUCTODataGridView.Rows.Count; count++)
                {
                    var montoMinimo = Convert.ToInt32(impuestoBL.GetFromImpuestoById(5).Porcentaje);

                    if (Convert.ToInt32(pRODUCTODataGridView.Rows[count].Cells[5].Value) >= montoMinimo)
                    {
                        pRODUCTODataGridView[5, count].Style.BackColor = System.Drawing.Color.Green; //SOLO LA COLUMNA
                    }

                    if (Convert.ToInt32(pRODUCTODataGridView.Rows[count].Cells[5].Value) < montoMinimo
                        && Convert.ToInt32(pRODUCTODataGridView.Rows[count].Cells[5].Value) > 0)
                    {
                        pRODUCTODataGridView[5, count].Style.BackColor = System.Drawing.Color.Yellow; 
                    }

                    if (Convert.ToInt32(pRODUCTODataGridView.Rows[count].Cells[5].Value) == 0)
                    {
                        pRODUCTODataGridView[5, count].Style.BackColor = System.Drawing.Color.Red; 
                    }
                    else
                    {
                        pRODUCTODataGridView.Rows[count].DefaultCellStyle.BackColor = System.Drawing.Color.White;
                    }
                }
            }
            catch (Exception)
            { 
                //MessageBox.Show(ex.Message + "Formato de stock incorrecto");
                MessageBox.Show("Revise las reglas de negocio");
            }
        }


        //private void gestionaResaltados(DataGridView visor, Int32 fila, System.Drawing.Color c)
        //{
        //    visor.Rows[fila].Cells[0].Style.BackColor = c;
        //    visor.Rows[fila].Cells[1].Style.BackColor = c;
        //    visor.Rows[fila].Cells[2].Style.BackColor = c;
        //    visor.Rows[fila].Cells[3].Style.BackColor = c;
        //}

    }
}
